home *** CD-ROM | disk | FTP | other *** search
/ Developer Helper 1: Phil & Dave's Excellent CD / Excellent CD HFS.raw / Moof / Goodies / HyperCard Goodies / HyperCard Dev. ToolKit / Serial & MacinTalk XCMDs / XCmdGlue.inc < prev   
Text File  |  1987-07-04  |  7KB  |  360 lines

  1. { Sample glue routines to call back to HyperCard.  See example use in Peek.p and Flash.p }
  2.  
  3. { Assumes the XCMD has included this file and has named its argument "paramPtr". }
  4.  
  5.  
  6. PROCEDURE DoJsr(addr: ProcPtr); INLINE $205F,$4E90;
  7.  
  8.  
  9. FUNCTION StringMatch(pattern: Str255; target: Ptr): Ptr;
  10. BEGIN
  11.   WITH paramPtr^ DO
  12.     BEGIN
  13.       inArgs[1] := ORD(@pattern);
  14.       inArgs[2] := ORD(target);
  15.       request := xreqStringMatch;
  16.       DoJsr(entryPoint);
  17.       StringMatch := Ptr(outArgs[1]);
  18.     END;
  19. END;
  20.  
  21.  
  22. FUNCTION PasToZero(str: Str255): Handle;
  23. BEGIN
  24.   WITH paramPtr^ DO
  25.     BEGIN
  26.       inArgs[1] := ORD(@str);
  27.       request := xreqPasToZero;
  28.       DoJsr(entryPoint);
  29.       PasToZero := Handle(outArgs[1]);
  30.     END;
  31. END;
  32.  
  33.  
  34. PROCEDURE ZeroToPas(zeroStr: Ptr; VAR pasStr: Str255);
  35. BEGIN
  36.   WITH paramPtr^ DO
  37.     BEGIN
  38.       inArgs[1] := ORD(zeroStr);
  39.       inArgs[2] := ORD(@pasStr);
  40.       request := xreqZeroToPas;
  41.       DoJsr(entryPoint);
  42.     END;
  43. END;
  44.  
  45.  
  46. FUNCTION StrToLong(str: Str31): LongInt;
  47. BEGIN
  48.   WITH paramPtr^ DO
  49.     BEGIN
  50.       inArgs[1] := ORD(@str);
  51.       request := xreqStrToLong;
  52.       DoJsr(entryPoint);
  53.       StrToLong := outArgs[1];
  54.     END;
  55. END;
  56.  
  57.  
  58. FUNCTION StrToNum(str: Str31): LongInt;
  59. BEGIN
  60.   WITH paramPtr^ DO
  61.     BEGIN
  62.       inArgs[1] := ORD(@str);
  63.       request := xreqStrToNum;
  64.       DoJsr(entryPoint);
  65.       StrToNum := outArgs[1];
  66.     END;
  67. END;
  68.  
  69.  
  70. FUNCTION StrToBool(str: Str31): BOOLEAN;
  71. BEGIN
  72.   WITH paramPtr^ DO
  73.     BEGIN
  74.       inArgs[1] := ORD(@str);
  75.       request := xreqStrToBool;
  76.       DoJsr(entryPoint);
  77.       StrToBool := BOOLEAN(outArgs[1]);
  78.     END;
  79. END;
  80.  
  81.  
  82. FUNCTION StrToExt(str: Str31): Extended;
  83. VAR x: Extended;
  84. BEGIN
  85.   WITH paramPtr^ DO
  86.     BEGIN
  87.       inArgs[1] := ORD(@str);
  88.       inArgs[2] := ORD(@x);
  89.       request := xreqStrToExt;
  90.       DoJsr(entryPoint);
  91.       StrToExt := x;
  92.     END;
  93. END;
  94.  
  95.  
  96. FUNCTION LongToStr(posNum: LongInt): Str31;
  97. VAR str: Str31;
  98. BEGIN
  99.   WITH paramPtr^ DO
  100.     BEGIN
  101.       inArgs[1] := posNum;
  102.       inArgs[2] := ORD(@str);
  103.       request := xreqLongToStr;
  104.       DoJsr(entryPoint);
  105.       LongToStr := str;
  106.     END;
  107. END;
  108.  
  109.  
  110. FUNCTION NumToStr(num: LongInt): Str31;
  111. VAR str: Str31;
  112. BEGIN
  113.   WITH paramPtr^ DO
  114.     BEGIN
  115.       inArgs[1] := num;
  116.       inArgs[2] := ORD(@str);
  117.       request := xreqNumToStr;
  118.       DoJsr(entryPoint);
  119.       NumToStr := str;
  120.     END;
  121. END;
  122.  
  123.  
  124. FUNCTION NumToHex(num: LongInt; nDigits: INTEGER): Str31;
  125. VAR str: Str31;
  126. BEGIN
  127.   WITH paramPtr^ DO
  128.     BEGIN
  129.       inArgs[1] := num;
  130.       inArgs[2] := nDigits;
  131.       inArgs[3] := ORD(@str);
  132.       request := xreqNumToHex;
  133.       DoJsr(entryPoint);
  134.       NumToHex := str;
  135.     END;
  136. END;
  137.  
  138.  
  139. FUNCTION ExtToStr(num: Extended): Str31;
  140. VAR str: Str31;
  141. BEGIN
  142.   WITH paramPtr^ DO
  143.     BEGIN
  144.       inArgs[1] := ORD(@num);
  145.       inArgs[2] := ORD(@str);
  146.       request := xreqExtToStr;
  147.       DoJsr(entryPoint);
  148.       ExtToStr := str;
  149.     END;
  150. END;
  151.  
  152.  
  153. FUNCTION BoolToStr(bool: BOOLEAN): Str31;
  154. VAR str: Str31;
  155. BEGIN
  156.   WITH paramPtr^ DO
  157.     BEGIN
  158.       inArgs[1] := LongInt(bool);
  159.       inArgs[2] := ORD(@str);
  160.       request := xreqBoolToStr;
  161.       DoJsr(entryPoint);
  162.       BoolToStr := str;
  163.     END;
  164. END;
  165.  
  166.  
  167. PROCEDURE SendCardMessage(msg: Str255);
  168. BEGIN
  169.   WITH paramPtr^ DO
  170.     BEGIN
  171.       inArgs[1] := ORD(@msg);
  172.       request := xreqSendCardMessage;
  173.       DoJsr(entryPoint);
  174.     END;
  175. END;
  176.  
  177.  
  178. FUNCTION EvalExpr(expr: Str255): Handle;
  179. BEGIN
  180.   WITH paramPtr^ DO
  181.     BEGIN
  182.       inArgs[1] := ORD(@expr);
  183.       request := xreqEvalExpr;
  184.       DoJsr(entryPoint);
  185.       EvalExpr := Handle(outArgs[1]);
  186.     END;
  187. END;
  188.  
  189.  
  190. FUNCTION StringLength(strPtr: Ptr): LongInt;
  191. BEGIN
  192.   WITH paramPtr^ DO
  193.     BEGIN
  194.       inArgs[1] := ORD(strPtr);
  195.       request := xreqStringLength;
  196.       DoJsr(entryPoint);
  197.       StringLength := outArgs[1];
  198.     END;
  199. END;
  200.  
  201.  
  202. FUNCTION GetGlobal(globName: Str255): Handle;
  203. BEGIN
  204.   WITH paramPtr^ DO
  205.     BEGIN
  206.       inArgs[1] := ORD(@globName);
  207.       request := xreqGetGlobal;
  208.       DoJsr(entryPoint);
  209.       GetGlobal := Handle(outArgs[1]);
  210.     END;
  211. END;
  212.  
  213.  
  214. PROCEDURE SetGlobal(globName: Str255; globValue: Handle);
  215. BEGIN
  216.   WITH paramPtr^ DO
  217.     BEGIN
  218.       inArgs[1] := ORD(@globName);
  219.       inArgs[2] := ORD(globValue);
  220.       request := xreqSetGlobal;
  221.       DoJsr(entryPoint);
  222.     END;
  223. END;
  224.  
  225.  
  226. FUNCTION GetFieldByName(cardFieldFlag: BOOLEAN; fieldName: Str255): Handle;
  227. BEGIN
  228.   WITH paramPtr^ DO
  229.     BEGIN
  230.       inArgs[1] := ORD(cardFieldFlag);
  231.       inArgs[2] := ORD(@fieldName);
  232.       request := xreqGetFieldByName;
  233.       DoJsr(entryPoint);
  234.       GetFieldByName := Handle(outArgs[1]);
  235.     END;
  236. END;
  237.  
  238.  
  239. FUNCTION GetFieldByNum(cardFieldFlag: BOOLEAN; fieldNum: INTEGER): Handle;
  240. BEGIN
  241.   WITH paramPtr^ DO
  242.     BEGIN
  243.       inArgs[1] := ORD(cardFieldFlag);
  244.       inArgs[2] := fieldNum;
  245.       request := xreqGetFieldByNum;
  246.       DoJsr(entryPoint);
  247.       GetFieldByNum := Handle(outArgs[1]);
  248.     END;
  249. END;
  250.  
  251.  
  252. FUNCTION GetFieldByID(cardFieldFlag: BOOLEAN; fieldID: INTEGER): Handle;
  253. BEGIN
  254.   WITH paramPtr^ DO
  255.     BEGIN
  256.       inArgs[1] := ORD(cardFieldFlag);
  257.       inArgs[2] := fieldID;
  258.       request := xreqGetFieldByID;
  259.       DoJsr(entryPoint);
  260.       GetFieldByID := Handle(outArgs[1]);
  261.     END;
  262. END;
  263.  
  264.  
  265. PROCEDURE SetFieldByName(cardFieldFlag: BOOLEAN; fieldName: Str255; fieldVal: Handle);
  266. BEGIN
  267.   WITH paramPtr^ DO
  268.     BEGIN
  269.       inArgs[1] := ORD(cardFieldFlag);
  270.       inArgs[2] := ORD(@fieldName);
  271.       inArgs[3] := ORD(fieldVal);
  272.       request := xreqSetFieldByName;
  273.       DoJsr(entryPoint);
  274.     END;
  275. END;
  276.  
  277.  
  278. PROCEDURE SetFieldByNum(cardFieldFlag: BOOLEAN; fieldNum: INTEGER; fieldVal: Handle);
  279. BEGIN
  280.   WITH paramPtr^ DO
  281.     BEGIN
  282.       inArgs[1] := ORD(cardFieldFlag);
  283.       inArgs[2] := fieldNum;
  284.       inArgs[3] := ORD(fieldVal);
  285.       request := xreqSetFieldByNum;
  286.       DoJsr(entryPoint);
  287.     END;
  288. END;
  289.  
  290.  
  291. PROCEDURE SetFieldByID(cardFieldFlag: BOOLEAN; fieldID: INTEGER; fieldVal: Handle);
  292. BEGIN
  293.   WITH paramPtr^ DO
  294.     BEGIN
  295.       inArgs[1] := ORD(cardFieldFlag);
  296.       inArgs[2] := fieldID;
  297.       inArgs[3] := ORD(fieldVal);
  298.       request := xreqSetFieldByID;
  299.       DoJsr(entryPoint);
  300.     END;
  301. END;
  302.  
  303.  
  304. FUNCTION StringEqual(str1,str2: Str255): BOOLEAN;
  305. BEGIN
  306.   WITH paramPtr^ DO
  307.     BEGIN
  308.       inArgs[1] := ORD(@str1);
  309.       inArgs[2] := ORD(@str2);
  310.       request := xreqStringEqual;
  311.       DoJsr(entryPoint);
  312.       StringEqual := BOOLEAN(outArgs[1]);
  313.     END;
  314. END;
  315.  
  316.  
  317. PROCEDURE ReturnToPas(zeroStr: Ptr; VAR pasStr: Str255);
  318. BEGIN
  319.   WITH paramPtr^ DO
  320.     BEGIN
  321.       inArgs[1] := ORD(zeroStr);
  322.       inArgs[2] := ORD(@pasStr);
  323.       request := xreqReturnToPas;
  324.       DoJsr(entryPoint);
  325.     END;
  326. END;
  327.  
  328.  
  329. PROCEDURE ScanToReturn(VAR scanPtr: Ptr);
  330. BEGIN
  331.   WITH paramPtr^ DO
  332.     BEGIN
  333.       inArgs[1] := ORD(@scanPtr);
  334.       request := xreqScanToReturn;
  335.       DoJsr(entryPoint);
  336.     END;
  337. END;
  338.  
  339.  
  340. PROCEDURE ScanToZero(VAR scanPtr: Ptr);
  341. BEGIN
  342.   WITH paramPtr^ DO
  343.     BEGIN
  344.       inArgs[1] := ORD(@scanPtr);
  345.       request := xreqScanToZero;
  346.       DoJsr(entryPoint);
  347.     END;
  348. END;
  349.  
  350.  
  351. PROCEDURE ZeroBytes(dstPtr: Ptr; longCount: LongInt);
  352. BEGIN
  353.   WITH paramPtr^ DO
  354.     BEGIN
  355.       inArgs[1] := ORD(dstPtr);
  356.       inArgs[2] := longCount;
  357.       request := xreqZeroBytes;
  358.       DoJsr(entryPoint);
  359.     END;
  360. END;